style.scss 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286
  1. .watch-page {
  2. display: flex;
  3. height: 100%;
  4. gap: 0;
  5. width: 100%;
  6. @media (max-width: 768px) {
  7. flex-direction: column;
  8. height: auto;
  9. min-height: 100%;
  10. }
  11. &__content {
  12. flex: 1;
  13. min-width: 0;
  14. overflow-y: auto;
  15. padding: 12px 16px 32px;
  16. @media (max-width: 1199px) {
  17. padding: 8px 12px 24px;
  18. }
  19. @media (max-width: 768px) {
  20. padding: 0 0 16px;
  21. overflow-y: visible;
  22. }
  23. }
  24. &__player {
  25. position: relative;
  26. width: 100%;
  27. padding-top: 56.25%; // 16:9
  28. background: #000;
  29. border-radius: 12px;
  30. overflow: hidden;
  31. box-shadow: 0 4px 16px var(--shadow-color);
  32. @media (max-width: 768px) {
  33. border-radius: 0;
  34. box-shadow: none;
  35. }
  36. iframe {
  37. position: absolute;
  38. top: 0;
  39. left: 0;
  40. width: 100%;
  41. height: 100%;
  42. border: none;
  43. }
  44. }
  45. &__offline {
  46. position: absolute;
  47. top: 0;
  48. left: 0;
  49. width: 100%;
  50. height: 100%;
  51. display: flex;
  52. flex-direction: column;
  53. align-items: center;
  54. justify-content: center;
  55. gap: 12px;
  56. color: #999;
  57. a {
  58. color: var(--color-accent);
  59. text-decoration: underline;
  60. }
  61. }
  62. &__info {
  63. padding: 16px 4px 0;
  64. @media (max-width: 768px) {
  65. padding: 14px 16px 0;
  66. }
  67. }
  68. &__title {
  69. font-size: 1.375rem;
  70. font-weight: 700;
  71. line-height: 1.3;
  72. margin: 0 0 12px;
  73. color: var(--text-primary);
  74. word-break: break-word;
  75. @media (max-width: 768px) {
  76. font-size: 1.125rem;
  77. margin-bottom: 10px;
  78. }
  79. }
  80. &__meta {
  81. display: flex;
  82. align-items: center;
  83. justify-content: space-between;
  84. gap: 12px;
  85. flex-wrap: wrap;
  86. padding-bottom: 12px;
  87. border-bottom: 1px solid var(--border-default);
  88. @media (max-width: 480px) {
  89. flex-direction: column;
  90. align-items: stretch;
  91. gap: 12px;
  92. }
  93. }
  94. &__channel {
  95. display: flex;
  96. align-items: center;
  97. gap: 10px;
  98. min-width: 0;
  99. flex: 1;
  100. color: inherit;
  101. text-decoration: none;
  102. &:hover .watch-page__channel-name {
  103. color: var(--text-link);
  104. }
  105. }
  106. &__avatar {
  107. width: 40px;
  108. height: 40px;
  109. border-radius: 50%;
  110. object-fit: cover;
  111. flex-shrink: 0;
  112. &--default {
  113. display: flex;
  114. align-items: center;
  115. justify-content: center;
  116. background: var(--bg-elevated);
  117. color: var(--text-secondary);
  118. font-weight: 700;
  119. }
  120. }
  121. &__channel-body {
  122. display: flex;
  123. flex-direction: column;
  124. gap: 2px;
  125. min-width: 0;
  126. }
  127. &__channel-name {
  128. display: inline-flex;
  129. align-items: center;
  130. gap: 4px;
  131. font-size: 0.9375rem;
  132. font-weight: 600;
  133. color: var(--text-primary);
  134. transition: color 0.15s;
  135. overflow: hidden;
  136. text-overflow: ellipsis;
  137. white-space: nowrap;
  138. }
  139. &__verified {
  140. display: inline-flex;
  141. align-items: center;
  142. justify-content: center;
  143. width: 14px;
  144. height: 14px;
  145. border-radius: 50%;
  146. background: var(--color-accent);
  147. color: #fff;
  148. font-size: 0.5625rem;
  149. flex-shrink: 0;
  150. }
  151. &__channel-sub {
  152. font-size: 0.75rem;
  153. color: var(--text-muted);
  154. overflow: hidden;
  155. text-overflow: ellipsis;
  156. white-space: nowrap;
  157. }
  158. &__viewers {
  159. display: inline-flex;
  160. align-items: center;
  161. gap: 4px;
  162. color: var(--text-secondary);
  163. font-weight: 600;
  164. }
  165. &__viewers-dot {
  166. display: inline-block;
  167. width: 6px;
  168. height: 6px;
  169. border-radius: 50%;
  170. background: #ef4444;
  171. animation: watch-page-live-pulse 1.5s ease-in-out infinite;
  172. }
  173. @keyframes watch-page-live-pulse {
  174. 0%, 100% {
  175. opacity: 1;
  176. transform: scale(1);
  177. }
  178. 50% {
  179. opacity: 0.5;
  180. transform: scale(0.85);
  181. }
  182. }
  183. &__actions {
  184. display: flex;
  185. align-items: center;
  186. gap: 8px;
  187. flex-shrink: 0;
  188. flex-wrap: wrap;
  189. @media (max-width: 480px) {
  190. width: 100%;
  191. justify-content: flex-start;
  192. }
  193. }
  194. &__follow {
  195. padding: 8px 16px;
  196. }
  197. &__desc {
  198. margin-top: 14px;
  199. padding: 12px 14px;
  200. background: var(--bg-subtle);
  201. border-radius: 10px;
  202. color: var(--text-primary);
  203. font-size: 0.875rem;
  204. line-height: 1.5;
  205. &-body {
  206. margin: 0;
  207. white-space: pre-wrap;
  208. word-break: break-word;
  209. display: -webkit-box;
  210. -webkit-line-clamp: 3;
  211. -webkit-box-orient: vertical;
  212. overflow: hidden;
  213. }
  214. &--open &-body {
  215. -webkit-line-clamp: unset;
  216. overflow: visible;
  217. }
  218. &-toggle {
  219. margin-top: 8px;
  220. padding: 0;
  221. border: none;
  222. background: transparent;
  223. color: var(--text-secondary);
  224. font-size: 0.8125rem;
  225. font-weight: 600;
  226. cursor: pointer;
  227. &:hover {
  228. color: var(--text-primary);
  229. }
  230. }
  231. }
  232. &__chat {
  233. width: 360px;
  234. flex-shrink: 0;
  235. border-left: 1px solid var(--border-default);
  236. display: flex;
  237. flex-direction: column;
  238. background: var(--bg-page);
  239. @media (max-width: 1199px) {
  240. width: 320px;
  241. }
  242. @media (max-width: 768px) {
  243. width: 100%;
  244. height: 500px;
  245. border-left: none;
  246. border-top: 1px solid var(--border-default);
  247. }
  248. }
  249. }